package mac;


import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author kastillo
 */
public class ejmac {
public static void main(String[] args) throws Exception {
    // Generarllave secreta para HMAC-MD5
    KeyGenerator kg = KeyGenerator.getInstance("HmacMD5");
    SecretKey sk = kg.generateKey();
    // Obtener instancia de objeto Mac e inicializar
    Mac mac = Mac.getInstance("HmacMD5");mac.init(sk);

    // Obtener el MAC y escribirlo
    byte [ ] mensaje = "Hola mundo".getBytes();
    byte [ ] elmac = mac.doFinal(mensaje);
    String s = new String (elmac);
    System.out.println ("MAC: " + s );
    // Verificar con el MAC
    Mac mac2 = Mac.getInstance("HmacMD5");mac2.init(sk);
    byte [ ] mensaje2 = "Hola mundo".getBytes();
    byte [ ] elmac2 = mac.doFinal(mensaje2);
    String s2 = new String (elmac2);
    System.out.println ("MAC: " + s2 );
    boolean verifies2 = verificar (elmac,elmac2);
    System.out.println("Verificacion del MAC: " + verifies2);
    // cambiar el texto y verificar con el MAC

    Mac mac3 = Mac.getInstance("HmacMD5");
    mac3.init(sk);
    byte [ ] mensaje3 = "Hola munda".getBytes();
    byte [ ] elmac3 = mac.doFinal(mensaje3);
    String s3 = new String (elmac3);
    System.out.println ("MAC: " + s3 );
    boolean verifies3 = verificar (elmac,elmac3);
    System.out.println("Verificacion del MAC: " + verifies3);
}

public static boolean verificar (byte[] dig1, byte[] dig2)
{
    for (int i=0; i< dig1.length-1 ; i++){
        if ( dig1[i] != dig2[i] )
            return false;
        }

    return true;
}

}


